package com.ehsy.service;

import com.dtflys.forest.annotation.*;
import com.dtflys.forest.callback.OnProgress;
import com.dtflys.forest.extensions.DownloadFile;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;

/**
 * @author YanZhen_Li
 * @version 1.0
 * @title FileService
 * @description
 * @create 2024/6/19 15:49
 */

@Component
@Address(host = "127.0.0.1", port = "8080")
public interface FileService {
    @Post(url = "/file/testFile")
    String test01(@DataFile("file") String filePath, OnProgress onProgress);

    /**
     * byte数组
     * 使用byte数组和Inputstream对象时一定要定义fileName属性
     */
    @Post(url = "/file/testFile")
    String test02(@DataFile(value = "file", fileName = "${1}") byte[] bytes, String filename);

    /**
     * Inputstream 对象
     * 使用byte数组和Inputstream对象时一定要定义fileName属性
     */
    @Post(url = "/file/testFile")
    String test03(@DataFile(value = "file", fileName = "${1}") InputStream in, String filename);

    /**
     * Spring Web MVC 中的 MultipartFile 对象
     */
    @PostRequest(url = "/file/testFile")
    String test04(@DataFile(value = "file") MultipartFile multipartFile, OnProgress onProgress);

    /**
     * Spring 的 Resource 对象
     */
    @Post(url = "/file/testFile")
    String test05(@DataFile(value = "file") Resource resource);

    /**
     * 带上参数上传文件
     */
    @Post(url = "/file/testFileAndParam")
    String test06(@DataFile("file") File file, @Body("p1") String p1, @Body("p2") Integer p2);

    /**
     * 在方法上加上@DownloadFile注解
     * dir属性表示文件下载到哪个目录
     * filename属性表示文件下载成功后以什么名字保存，如果不填，这默认从URL中取得文件名
     * OnProgress参数为监听上传进度的回调函数
     */
    @Get(url = "/file/download/bg.png")
    @DownloadFile(dir = "${0}", filename = "${1}")
    File test07(String dir, String filename, OnProgress onProgress);


    /**
     * 返回类型用byte[]，可将下载的文件转换成字节数组
     */
    @GetRequest(url = "/file/download/bg.png")
    byte[] test08();

    /**
     * 返回类型用InputStream，用流的方式读取文件内容
     */
    @GetRequest(url = "/file/download/bg.png")
    InputStream test09();


}
